/*************************************************************************
 *                                                                       *
 * This file is part of the FreeMAPs distribution.  For full copyright   *
 * information, see COPYRIGHT and COPYING.LESSER.                        *
 *                                                                       *
 * Author:           sqbang                                              *
 * Email:            sqbang@ustc.edu                                     *
 * Date:             2013.11.21                                          *
 *                                                                       *
 *************************************************************************/

#ifndef FreeMAPs_include_COMMON_info_StructuredMeshInfo_h
#define FreeMAPs_include_COMMON_info_StructuredMeshInfo_h

#include "FreeMAPsConfig.h"

//COMMON headers
#include "COMMON/base/StateIndicator.h"
#include "COMMON/enum/MeshPackage.h"

namespace FreeMAPs
{

class StructuredMeshInfo : public StateIndicator
{
public:

    explicit
    StructuredMeshInfo(
        const std::string& parent_name,
        const std::string& object_name);

    ~StructuredMeshInfo();

public:

    inline MeshPackage
    get_mesh_package() const;

public:

    void
    clear();

    void
    get_from_input (
        const InputDatabase* db);

    friend std::ostream&
    operator << (
        std::ostream& os,
        const StructuredMeshInfo& rhs);

private:

    typedef StateIndicator Parent;

    /*
     * when use structured mesh, tells the conerstone package
     * used to support it.
     *
     * note it it only worked when structured mesh is required.
     */
    MeshPackage d_mesh_package;
};

}

#include "COMMON/info/StructuredMeshInfo.inl"

#endif
